在 Rails model 裡面,我們很常會定義所謂一筆資料的「狀態」,以貨運的例子來講,可以定義成「空運」、「海運」。又或是一筆發票,可以定義成「進口發票」、「出口發票」。
在 Rails 裡的資料庫,我們只要儲存 integer,並在 model / concerns 裡定義及維護好這些屬性,就可以直接使用。
然後在 migration 生成資料時,記得型態選擇為 integer,由於我們專案的關係,初始值就不要強迫設定。以下面為例子,comment 是自己註記用,可加也可不加。
以貨運的例子及發票的屬性來講,我們就可以在 model 宣告為:
至於,在這次範例中的 alias_enum 是因為本範例,會有另一個系統,透過 API 傳送資料過來,舉例為另一個系統是傳 AE,哪相對應就會吃到 air_impoer.
總結:
今天根據要使用的情境,已知是很確定要設定的屬性為何及固定不會有很大的變化,就使用 integer + Enum 的機制做,並且也是最有彈性及最節省資料庫欄位大小的法。